package com.init;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

/********************************************************
* 类名：SingletonCache
* 功能：缓存单例
* 作者：Yaozhx 2016-6-15
* 修改记录：
*          日期                 修改人                 修改说明
********************************************************/
public class SingletonCache {
	
	/********************************************************
	* 功能     : 私有构造方法，防止被实例化
	* 作者      ：Yaozhx 2016-6-15
	* 参数表:      
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
   private SingletonCache(){}
   
   
	/********************************************************
	* 功能     : 此处使用一个内部类来维护单例
	* 作者      ：Yaozhx 2016-6-15
	* 参数表:      
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
   private static class SingletonCacheFactory {  
       private static CacheManager instance =CacheManager.create(); ;  
   } 
   

   /********************************************************
   * 函数名: getInstance
   * 功能     : 获取实例
   * 作者      ：Yaozhx 2016-6-15
   * 参数表: @return    
   * 返回值: SingletonCache    
   * 修改记录：
   *          日期                 修改人                 修改说明
   *******************************************************
    */
   public static CacheManager getInstance() {  
       return SingletonCacheFactory.instance;  
   }  
   
   /********************************************************
   * 函数名: getCache
   * 功能     : 根据缓存空间名称取得相应缓存
   * 作者      ：Yaozhx 2016-6-15
   * 参数表: @param name 缓存空间名称
   * 参数表: @return    
   * 返回值: Cache    
   * 修改记录：
   *          日期                 修改人                 修改说明
   *******************************************************
    */
   public static Cache getCache(String cacheName) {  
	   CacheManager cachemanager = SingletonCache.getInstance();
	   Cache cache = cachemanager.getCache(cacheName);
       return cache;  
   }  
   
 
   
   /********************************************************
   * 函数名: readResolve
   * 功能     : 如果该对象被用于序列化，可以保证对象在序列化前后保持一致
   * 作者      ：Yaozhx 2016-6-15
   * 参数表: @return    
   * 返回值: Object    
   * 修改记录：
   *          日期                 修改人                 修改说明
   ********************************************************/
   public Object readResolve() {  
       return getInstance();  
   } 
   
   /********************************************************
   * 函数名: getCacheElement
   * 功能     : 通过名称从缓存中获取数据
   * 作者      ：Yaozhx 2016-6-16
   * 参数表: @param cacheKey
   * 参数表: @param cache
   * 参数表: @return
   * 参数表: @throws Exception    
   * 返回值: Object    
   * 修改记录：
   *          日期                 修改人                 修改说明
   ******************************************************* */
	public static Object getCacheElement(Integer cacheKey,Cache cache)  {
	   Element e = cache.get(cacheKey);
		if (e == null) {
			return null;
		}
		return e.getValue();
	}
	
	   /********************************************************
	   * 函数名: getCacheElement
	   * 功能     : 通过名称从缓存中获取数据
	   * 作者      ：Yaozhx 2016-6-16
	   * 参数表: @param cacheKey
	   * 参数表: @param cache
	   * 参数表: @return
	   * 参数表: @throws Exception    
	   * 返回值: Object    
	   * 修改记录：
	   *          日期                 修改人                 修改说明
	   ******************************************************* */
		public static Object getCacheElement(String cacheKey,Cache cache)  {
		   Element e = cache.get(cacheKey);
			if (e == null) {
				return null;
			}
			return e.getValue();
		}
	
	/********************************************************
	* 函数名: addToCache
	* 功能     : 将对象添加到缓存中
	* 作者      ：Yaozhx 2016-6-16
	* 参数表: @param cacheKey
	* 参数表: @param result
	* 参数表: @param cache
	* 参数表: @throws Exception    
	* 返回值: void    
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
	public static void addToCache(Integer cacheKey, Object result,Cache cache) {
		Element element = new Element(cacheKey, result);
		cache.put(element);
	}
   
	/********************************************************
	* 函数名: addToCache
	* 功能     : 将对象添加到缓存中
	* 作者      ：Yaozhx 2016-6-16
	* 参数表: @param cacheKey
	* 参数表: @param result
	* 参数表: @param cache
	* 参数表: @throws Exception    
	* 返回值: void    
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
	public static void addToCache(String cacheKey, Object result,Cache cache) {
		Element element = new Element(cacheKey, result);
		cache.put(element);
	}
	
	
	/********************************************************
	* 函数名: deleteCache
	* 功能     : 通过名称删除缓存中数据
	* 作者      ：Yaozhx 2016-6-16
	* 参数表: @param cacheKey
	* 参数表: @param cache    
	* 返回值: void    
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
	public static void deleteCache(Integer cacheKey,Cache cache){
		
		cache.remove(cacheKey);
	};
   
   
	/********************************************************
	* 函数名: deleteCache
	* 功能     : 通过名称删除缓存中数据
	* 作者      ：Yaozhx 2016-6-16
	* 参数表: @param cacheKey
	* 参数表: @param cache    
	* 返回值: void    
	* 修改记录：
	*          日期                 修改人                 修改说明
	********************************************************/
	public static void deleteCache(String cacheKey,Cache cache){

		cache.remove(cacheKey);
	};


}